<?php
/**
 * Each engineer has a duty to keep the code elegant
 * Created by wolffy.
 * Author @wolffy<13750088090@sina.cn>
 * Date: 2018/8/6
 * Time: 14:38
 */
namespace App\Handlers;

trait ApiResponse
{
    public $statusTexts = array(
        100 => 'Continue',
        101 => 'Switching Protocols',
        102 => 'Processing',            // RFC2518
        103 => 'Early Hints',
        200 => 'OK',
        201 => 'Created',
        202 => 'Accepted',
        203 => 'Non-Authoritative Information',
        204 => 'No Content',
        205 => 'Reset Content',
        206 => 'Partial Content',
        207 => 'Multi-Status',          // RFC4918
        208 => 'Already Reported',      // RFC5842
        226 => 'IM Used',               // RFC3229
        300 => 'Multiple Choices',
        301 => 'Moved Permanently',
        302 => 'Found',
        303 => 'See Other',
        304 => 'Not Modified',
        305 => 'Use Proxy',
        307 => 'Temporary Redirect',
        308 => 'Permanent Redirect',    // RFC7238
        400 => 'Bad Request',
        401 => 'Unauthorized',
        402 => 'Payment Required',
        403 => 'Forbidden',
        404 => 'Not Found',
        405 => 'Method Not Allowed',
        406 => 'Not Acceptable|',
        407 => 'Proxy Authentication Required',
        408 => 'Request Timeout',
        409 => 'Conflict',
        410 => 'Gone',
        411 => 'Length Required',
        412 => 'Precondition Failed',
        413 => 'Payload Too Large',
        414 => 'URI Too Long',
        415 => 'Unsupported Media Type',
        416 => 'Range Not Satisfiable',
        417 => 'Expectation Failed',
        418 => 'I\'m a teapot',                                               // RFC2324
        421 => 'Misdirected Request',                                         // RFC7540
        422 => 'Unprocessable Entity',                                        // RFC4918
        423 => 'Locked',                                                      // RFC4918
        424 => 'Failed Dependency',                                           // RFC4918
        425 => 'Too Early',                                                   // RFC-ietf-httpbis-replay-04
        426 => 'Upgrade Required',                                            // RFC2817
        428 => 'Precondition Required',                                       // RFC6585
        429 => 'Too Many Requests',                                           // RFC6585
        431 => 'Request Header Fields Too Large',                             // RFC6585
        451 => 'Unavailable For Legal Reasons',                               // RFC7725
        500 => 'Internal Server Error',
        501 => 'Not Implemented',
        502 => 'Bad Gateway',
        503 => 'Service Unavailable',
        504 => 'Gateway Timeout',
        505 => 'HTTP Version Not Supported',
        506 => 'Variant Also Negotiates',                                     // RFC2295
        507 => 'Insufficient Storage',                                        // RFC4918
        508 => 'Loop Detected',                                               // RFC5842
        510 => 'Not Extended',                                                // RFC2774
        511 => 'Network Authentication Required',                             // RFC6585
        520 => '服务器维护升级中，稍等片刻|服务器维护升级中，稍等片刻',
        0   => 'success',
        10100 => '用户名或密码不正确|用户名或密码不正确',
        10101 => '手机号码已被占用|手机号码已被占用',
        10102 => '手机号码不存在|手机号码不存在',
        10103 => '原登录密码不正确|原登录密码不正确',
        10104 => '原支付密码不正确|原支付密码不正确',
        10105 => '账号被冻结|账号被冻结',
        10106 => '请完成实名认证|请完成实名认证',
        10109 => '发送短信次数超出限制|发送短信次数超出限制',
        10110 => '短信验证码不正确|短信验证码不正确',
        10111 => '邀请码不存在|邀请码不存在',
        10112 => '支付密码不正确|支付密码不正确',
        10113 => '手机号码未绑定该账号|手机号码未绑定该账号',
        10200 => '无效文件|无效文件',
        10201 => '图片格式不支持|图片格式不支持',
        10202 => '图片大小超出限制|图片大小超出限制',
        10203 => '图片上传失败|图片上传失败',
        10204 => '图片不存在|图片不存在',
        10300 => '您已通过实名认证|您已通过实名认证',
        10301 => '身份认证公钥不存在|身份认证公钥不存在',
        10302 => '身份认证私钥不存在|身份认证私钥不存在',
        10303 => '请先上传身份照|请先上传身份照',
        10304 => '储蓄卡不允许重复添加|储蓄卡不允许重复添加',
        10305 => '信用卡不允许重复添加|信用卡不允许重复添加',
        10306 => '信用卡不存在|信用卡不存在',
        10307 => '储蓄卡不存在|储蓄卡不存在',
        10308 => '该卡的还款计划在执行中暂不允许解绑|该卡的还款计划在执行中暂不允许解绑',
        10309 => '该卡片信息暂无接入|该卡片信息暂无接入',
        10400 => '账单不存在|账单不存在',
        10500 => '还没到账单日|还没到账单日',
        10501 => '今天之前的日期不能选择|今天之前的日期不能选择',
        10502 => '今天的日期不能大于今天10:00|今天的日期不能大于今天10:00',
        10503 => '不能大于等于还款日期|不能大于等于还款日期',
        10504 => '还款金额过大所选还款天数不足|还款金额过大所选还款天数不足',
        10505 => '还款金额最低限额180元|还款金额最低限额180元',
        10506 => '还款金额最高限额800000元|还款金额最高限额800000元',
        10507 => '还款通道不存在|还款通道不存在',
        10508 => '还款通道对应的会员等级不存在|还款通道对应的会员等级不存在',
        10509 => '创建子商户号出错|创建子商户号出错',
        10510 => '开卡链接',
        10511 => '计划执行中，修改（增加）计划需手动终止原计划|计划执行中，修改（增加）计划需手动终止原计划',
        10512 => '还款计划不存在|还款计划不存在',
        10513 => '子商户绑卡失败|子商户绑卡失败',
        10514 => '交易卡开通中,请稍等|交易卡开通中,请稍等',
        10515 => '逾期账单不支持还款设置|逾期账单不支持还款设置',
        10516 => '本月账单未出|本月账单未出',
        10517 => '信用卡认证',
        10518 => '非继续执行状态|非继续执行状态',
        10519 => '所选还款天数不足|所选还款天数不足',
        10520 => '至少选择2天以上|至少选择2天以上',
        10521 => '剩余还款天数至少3天以上|剩余还款天数至少3天以上',
        10522 => '您当前有一笔处于消费或还款中，稍后再重试|您当前有一笔处于消费或还款中，稍后再重试',
        10523 => '非取消计划状态|非取消计划状态',
        10524 => '消费地址格式不正确|消费地址格式不正确',
        10525 => '银联C已关闭，请选择银联E|银联C已关闭，请选择银联E',
        10600 => '单笔提现最低金额2元|单笔提现最低金额2元',
        10601 => '提现失败|提现失败',
        10602 => '还款计划执行中不允许提现|还款计划执行中不允许提现',
        10603 => '未使用过还款计划不允许提现|未使用过还款计划不允许提现',
        10700 => '单笔提现最低金额12元|单笔提现最低金额12元',
        10701 => '提现失败|提现失败',
        10702 => '余额不足|余额不足',
        10703 => '收银通道不存在|收银通道不存在',
        10800 => '您已是服务商，无需升级|您已是服务商，无需升级',
        10801 => '您已是代言人，无需升级|您已是代言人，无需升级',
        10802 => '您已是高级会员，无需升级|您已是高级会员，无需升级',
        10803 => '不存在该等级的升级|不存在该等级的升级',
        10900 => '您的信息有误|您的信息有误',
        10901 => '暂不支持该银行|暂不支持该银行',
        10902 => '交易时间:7:30-22:30|交易时间:7:30-22:30',
        11000 => '暂不支持该信用卡的申请|暂不支持该信用卡的申请',
        11001 => '办卡链接',
        12001 => '未开通服务商入口权限|未开通服务商入口权限',
        12002 => '自定义最长天数差为31天|自定义最长天数差为31天',
        12003 => '团队分润比例1-100%|团队分润比例1-100%',
        12004 => '该团队已存在，请勿重复添加|该团队已存在，请勿重复添加',
        12005 => '超出团队成员数量|超出团队成员数量',
        12006 => '不支持添加本人作为团队|不支持添加本人作为团队',
        12007 => '该手机号码在平台未注册|该手机号码在平台未注册',
        12008 => '该团队已被其他服务商绑定|该团队已被其他服务商绑定',
        13000 => '该邀请人不存在|该邀请人不存在',
    );

    /**
     * @var int
     */
    protected $statusCode;

    /**
 * @var string
 */
    protected $statusText;

    /**
     * @param $code
     * @param string $msg
     * @param string $message
     * @param array $data
     * @param bool $isDefault
     * @return \Illuminate\Http\JsonResponse
     */
    public function responseJson($code, $data = [], $isDefault = true, $msg = '', $message = '')
    {
        $this->statusCode = (int) $code;
        if ($isDefault) {
            $this->statusText = isset($this->statusTexts[$code]) ? $this->statusTexts[$code] : 'unknown status';
            $msgs = explode('|', $this->statusText);
            $result = [
                'code' => (int) $code,//system返回码
                'msg' => isset($msgs[0]) ? $msgs[0] : '',//system返回码描述
                'message' => isset($msgs[1]) ? $msgs[1] : '',//业务返回码描述
            ];
        } else {
            $result = [
                'code' => (int) $code,//system返回码
                'msg' => $msg,//system返回码描述
                'message' => $message,//业务返回码描述
            ];
        }
        $json = empty($data) ? $result : array_merge($result, ['data' => $data]);
        return response()->json($json);
    }
}
